#include <iostream>
#include <vector>

using namespace std;
// 59.螺旋矩阵II
// 给你一个正整数 n ，生成一个包含 1 到 n^2 所有元素，且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。
class Solution {
public:
    vector<vector<int>> generateMatrix(int n) {
        vector<vector<int>> res(n,vector<int>(n,0));
        // 控制边界
        int l = 0, r = n-1, t=0, b = n-1;   // 边界：左 右 上 下
        int k = 1;  // 要填的数字

        while(true) {
            // 从左向右
            for(int i = l; i <= r; i++)
                res[t][i] = k++;
            if(++t > b) break;  // 判断越界
            // 从上向下
            for(int i = t; i <= b; i++)
                res[i][r] = k++;
            if(--r < l) break;
            // 从右向左
            for(int i = r; i >= l; i--)
                res[b][i] = k++;
            if(--b < t) break;
            // 从下向上
            for(int i = b; i >= t; i--)
                res[i][l] = k++;
            if(++l > r) break;
        }

        return res;
    }
};
void printMatrix(vector<vector<int>> &res) {
    cout << "[";
    for(int i = 0; i < res.size(); i++) {
        cout << "[";
        for(int j = 0; j < res[0].size(); j++) {
            cout << res[i][j];
            if(j < res[0].size() - 1)
                cout << ",";
        }
        cout << "]";
        if(i < res.size() - 1)
            cout << ",";
    }
    cout << "]" << endl;
}
int main() {
    vector<vector<int>> res;
    int n = 3;
    res = Solution().generateMatrix(n);
    printMatrix(res);

    n = 1;
    res = Solution().generateMatrix(n);
    printMatrix(res);

    n = 4;
    res = Solution().generateMatrix(n);
    printMatrix(res);
    return 0;
}
